package br.edu.oxente.buzz.service;

import br.edu.oxente.buzz.entity.Post;
import java.util.List;

/**
 * FBServices eh a interface que define os servicos prestados pelo FIPBUZZ, um
 * clone de BUZZ implementado na disciplina Praticas de Programacao 2011.1 do
 * curso FIPSI.
 *
 * @author Nigini A. Oliveira - ensino@nigini.com.br
 */
public interface OBServices {

	/**
	 * Adiciona uma conta Buzz para o usuario "login".
	 * @param login nome identificador de um usuario no sistema.
	 * @return <code>TRUE</code> Caso conta tenha sido criada com sucesso e 
	 * <code>FALSE</code> caso o login ja exista.
	 */
	public boolean addUser( String login );

	/**
	 * Adiciona um post com "text" na conta do usuario "login" e na dos seus seguidores.
	 * @param login nome identificador do usuario postante.
	 * @param text mensagem postada.
	 * @return <code>TRUE</code> Caso a insercao tenha sido efetuada com sucesso, ou
	 * <code>FALSE</code> caso o usuario nao exista.
	 */
	public boolean addPost( String login, String text );

	/**
	 * Returna um certo numero de posts "limit" da conta do usuario "login".
	 * @param login nome identificador do usuario dos posts.
	 * @return A lista de posts caso o usuario exista, e <code>NULL</code> caso contrario.
	 */
	public List<Post> listPosts( String login, int limit );

	/**
	 * Adiciona um usuario "userToFollow" na lista de seguidores do usuario "login".
	 * @param login nome identificador do usuario que deseja seguir alguem.
	 * @param userToFollow identificador do usuario a ser seguido.
	 * @return <code>TRUE</code> Caso a operacao tenha sido efetuada com sucesso e
	 * <code>FALSE</code> caso um dos dois nao exista, ou caso "login" já siga "userToFollow".
	 */
	public boolean followUser( String login, String userToFollow );

	/**
	 * Compartilhar um post com todos os seguidores do usuario "login". Isso significa
	 * inserir o post na conta Buzz de cada usuario seguidor.
	 * @param login nome identificador do usuario compartilhador.
	 * @param toReshare o post que sera compartilhado.
	 * @return <code>TRUE</code> caso o post seja compartilhado com sucesso, e <code>FALSE</code>
	 * caso o usuario "login" ou o post "toReashare" nao existam.
	 */
	public boolean reshare( String login, Post toReshare );

	/**
	 * Insere um comentario do usuario "login" no post especificado.
	 * @param login nome identificador do usuario comentador.
	 * @param post o post que sera comentado.
	 * @param commentText texto que sera inserido no comentario.
	 * @return <code>TRUE</code> caso o post seja comentado com sucesso, e <code>FALSE</code>
	 * caso o usuario "login" ou o post "toReashare" nao existam.
	 */
	public boolean comment( String login, Post post, String commentText );
}
